﻿// 10206. 「一本通 6.3 练习 1」X-factor Chain.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>

using namespace std;


/*
https://loj.ac/p/10206

题目描述
原题来自 POJ 3421

输入正整数 x，求 x 的大于 1 的因子组成的满足任意前一项都能整除后一项的序列的最大长度，以及满足最大长度的序列的个数。

输入格式
多组数据，每组数据一行，包含一个正整数 x。

输出格式
对于每组数据，输出序列的最大长度以及满足最大长度的序列的个数。

2
3
4
10
100

1 1
1 1
2 1
2 2
4 6

数据范围与提示
对于全部数据，1<= x<= 2^{20}。
*/


vector<int> primes;
void divide(int x)
{
    for (int i = 2; i <= x / i; i++)
        if (x % i == 0)
        {
            int s = 0;
            while (x % i == 0) x /= i, s++;
            //cout << i << ' ' << s << endl;
            primes.push_back(i);  primes.push_back(s);
        }
    if (x > 1) {
        //cout << x << ' ' << 1 << endl;
        primes.push_back(x);  primes.push_back(1);
    }
    //cout << endl;
}

long long fac(int x) {
    if (x == 1) return 1;
    long long ret = 1;
    ret *= x * fac(x - 1);
    return ret;
}

int main()
{
    int n;
    while (cin >> n) {
        primes.clear();
        divide(n);
        int ans1 = 0;
        // 选择所有素因子就是最长路径
        for (int i = 1; i < primes.size(); i += 2) {
            ans1 += primes[i];
        }

        // 素因子的所有幂和的阶乘就是所有约数路径的组合
        // 除以每个素因数的阶乘 也就是取出重复的排列组合
        // 最后就是选取所有素因数(最长路径) 的路径数目
        long long ans2 = fac(ans1);   //数据范围2^20 最多20！ long long 即可
        for (int i = 1; i < primes.size(); i += 2) {
            ans2 = ans2 / fac(primes[i]);
        }

        cout << ans1 << " " << ans2 << endl;
    }

    return 0;
}
